package com.movie2.controller;

import com.movie2.model.entity.Poster;
import com.movie2.service.PosterService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

// /api/poster get

@RestController
@RequestMapping("/api/poster")
@CrossOrigin
@Slf4j
public class PosterController {
    @Autowired
    PosterService posterService;

    @GetMapping("")
    public List<Poster> getAllPoster() {
        log.info("PosterController -> getAllPoster()");
        return posterService.getAllPoster();
    }

    @Value("${xhn.poster.upload}")
    String upload;//获得本地目录

    // 单文件上传
    @RequestMapping("/upload")
    public Map<String, String> upload(@RequestParam(name = "title", defaultValue = "电影标题") String title,
                                      @RequestParam(name = "fid", defaultValue = "1") int fid,
                                      MultipartFile file) {
        log.info("PosterController类，upload()");
        Map<String, String> map = new HashMap<>();
        // （1）判断文件夹是否存在
        File path = new File(upload);
        if (!path.exists()) {
            path.mkdirs();//文件夹不存在，创建文件夹
        }
        // （2）文件重名
        //     解决方法 uuid；当前时间……
        // 使用uuid，保留原来的文件名，文件的类型是一致
        String originalFilename = file.getOriginalFilename();//获得原始的文件名“7.jpg”
        int index = originalFilename.lastIndexOf(".");
        // originalFilename.substring(0,index) 获得原始文件的名字，没有扩展名
        // originalFilename.substring(index)获得文件扩展名
        String newName = originalFilename.substring(0, index) + "_" + UUID.randomUUID().toString() + originalFilename.substring(index);
        // 保存文件
        try {
            file.transferTo(new File(upload + newName));//不出现异常，就是文件上传成功
            // 对数据库进行操作（把图片的路径保存到数据库中），varchar/char （建议使用）
            // blob二进制文件类型，把图片的二进制文件直接保存到数据库中，（很少用）
            map.put("message","文件保存成功");
            Poster poster = new Poster();
            poster.setUrl("/images/"+newName);
            poster.setFid(fid);
            poster.setStatus(1);
            poster.setTitle(title);
            // 保存到数据库中
            int count=posterService.insertPoster(poster);
            map.put("db","数据库保存成功");
            // return "不出现异常，就是文件上传成功";
        } catch (IOException ioException) {
            ioException.printStackTrace();//文件上传失败
            map.put("message","文件保存失败");
            // return "出现异常，文件上传失败";
        }
        return map;
    }
}
